package org.jaaksi.demo.ptr.ptr.header;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import in.srain.cube.views.ptr.PtrFrameLayout;
import in.srain.cube.views.ptr.PtrUIHandler;
import in.srain.cube.views.ptr.indicator.PtrIndicator;
import org.jaaksi.demo.ptr.R;

/**
 * Created by grumoon on 2015/1/20.
 * 可以自定义炫酷的loading动画，如loading过程中显示逐帧动画
 */
public class WindmillHeader extends FrameLayout implements PtrUIHandler
{

	private LayoutInflater inflater;

	// 下拉刷新视图（头部视图）
	private ViewGroup headView;

	// 下拉刷新文字
	private TextView tvHeadTitle;

	// 下拉图标
	private ImageView ivWindmill;

	private WindmillDrawable drawable;

	public WindmillHeader(Context context)
	{
		this(context, null);
	}

	public WindmillHeader(Context context, AttributeSet attrs)
	{
		this(context, attrs, 0);
	}

	public WindmillHeader(Context context, AttributeSet attrs, int defStyleAttr)
	{
		super(context, attrs, defStyleAttr);
		init(context);
	}

	/**
	 * 初始化
	 *
	 * @param context
	 */
	private void init(Context context)
	{

		inflater = LayoutInflater.from(context);
		/**
		 * 头部
		 */
		headView = (ViewGroup) inflater.inflate(R.layout.windmill_header, this,
		        true);
		ivWindmill = (ImageView) headView.findViewById(R.id.iv_windmill);
		tvHeadTitle = (TextView) headView.findViewById(R.id.tv_head_title);
		drawable = new WindmillDrawable(context, ivWindmill);
		ivWindmill.setImageDrawable(drawable);

	}

	@Override
	public void onUIReset(PtrFrameLayout ptrFrameLayout)
	{
		tvHeadTitle.setText("下拉刷新");
		drawable.stop();
	}

	@Override
	public void onUIRefreshPrepare(PtrFrameLayout ptrFrameLayout)
	{
		tvHeadTitle.setText("下拉刷新");
	}

	@Override
	public void onUIRefreshBegin(PtrFrameLayout ptrFrameLayout)
	{
		tvHeadTitle.setText("正在刷新");
		drawable.start();
	}

	@Override
	public void onUIRefreshComplete(PtrFrameLayout ptrFrameLayout)
	{
		ivWindmill.clearAnimation();
		tvHeadTitle.setText("刷新完成");
	}

	@Override
	public void onUIPositionChange(PtrFrameLayout frame, boolean isUnderTouch,
	        byte status, PtrIndicator ptrIndicator)
	{
		final int mOffsetToRefresh = frame.getOffsetToRefresh();
		final int currentPos = ptrIndicator.getCurrentPosY();
		final int lastPos = ptrIndicator.getLastPosY();

		if (isUnderTouch && status == PtrFrameLayout.PTR_STATUS_PREPARE)
		{
			drawable.postRotation(currentPos - lastPos);
			invalidate();
		}

		if (currentPos < mOffsetToRefresh && lastPos >= mOffsetToRefresh)
		{
			if (isUnderTouch && status == PtrFrameLayout.PTR_STATUS_PREPARE)
			{
				tvHeadTitle.setText("下拉刷新");

			}
		}
		else if (currentPos > mOffsetToRefresh && lastPos <= mOffsetToRefresh)
		{
			if (isUnderTouch && status == PtrFrameLayout.PTR_STATUS_PREPARE)
			{
				tvHeadTitle.setText("松开刷新");
			}
		}
	}

}
